﻿
/**
 * 对话框
 * @date 2017-05-21 
 */
if (!window.MsgDialog) {
	function MsgDialog(){
	}
}
/**
 * 打开子页面
 * @param name 对话框的id，必须
 * @param title 标题，必须
 * @param url 要打开的链接，必须
 * @param width 宽度 单位：px/em
 * @param height 高度 单位：px/em
 * @param options 参数 ↓
 * @param mode iframe(default) / ajax
 * @param style 样式 default, no-footer, comfortable-eye
 * @param okOpt ok按钮，{okName,okFunc}
 * @param cancelOpt cancel按钮，{cancelName,cancelFunc}
 * @param closeFunc 关闭按钮点击时的事件
 */
if (!MsgDialog.prototype.open) {
    MsgDialog.prototype.open=function(name, title, url, width, height, options){
    	var opt = {
			'fade': true,
			'position': 'fit',
			'unique': false,
			'mode': 'iframe',
			'style': 'default',
			'okOpt': null,
			'cancelOpt': null,
			'closeFunc': null,
		};
		$.extend(opt, options);
    	$.buildDialog({
    		'name': name,'title': title, 'url': url, 'width': width, 'height': height, 'mode': opt.mode, 
    		'style': opt.style, 'okOpt': opt.okOpt, 'cancelOpt': opt.cancelOpt, 'unique': opt.unique
    	});
    };
}
/**
 * 弹出警告提示
 * @param msg 警告信息
 * @param title 标题
 * @param okfunc 关闭时的回调函数
 */
if (!MsgDialog.prototype.warn) {
    MsgDialog.prototype.warn=function(msg,title,okfunc){
    	$.buildPromptDialog('warn',msg, title, okfunc);
    };
}
/**
 * 弹出信息提示
 * @param msg 提示信息
 * @param title 标题
 * @param okfunc 关闭时的回调函数
 */
if (!MsgDialog.prototype.info) {
    MsgDialog.prototype.info = function(msg,title,okfunc){
    	$.buildPromptDialog('info',msg, title, okfunc);
    };
}
/**
 * 信息确认对话框
 * @param msg
 * @param title
 * @param okfunc
 * @param cancelFunc
 */
if (!MsgDialog.prototype.confirm) {
    MsgDialog.prototype.confirm = function(msg,title,okfunc,cancelFunc, opt){
    	$.buildPromptDialog('confirm',msg, title, okfunc, cancelFunc, opt);
    };
}
/**
 * 提示操作成功
 * @param msg 成功提示信息
 * @param title 标题
 * @param okfunc 关闭时的回调函数
 */
if (!MsgDialog.prototype.success) {
    MsgDialog.prototype.success = function(msg,title,okfunc){
    	$.buildPromptDialog('success',msg, title, okfunc);
    };
}
/**
 * 错误提示
 * @param msg 错误信息
 * @param title 标题
 * @param okfunc 关闭时的回调函数
 */
if (!MsgDialog.prototype.error) {
    MsgDialog.prototype.error = function(msg,title,okfunc){
    	$.buildPromptDialog('error',msg, title, okfunc);
    };
}
/**
 * 实例：防止暴力点击
 * @param msg
 * @param key
 * @param time
 * @return true:已阻止，false:未阻止
 * @autor lj
 */
if (!MsgDialog.prototype.preventViolentClick) {
    MsgDialog.prototype.preventViolentClick = function(key,msg,time){
    	if(!key){
    		Logger.error("阻止暴力点击的key值是必须的");
    		return false;
    	}
    	msg = msg || "请不要频繁点击";
    	time = time || 500; // 默认500ms
    	var lastTimestamp = $.store.get(key);
    	var currTimestamp = new Date().getTime();
    	$.store.set(key,currTimestamp);
    	
    	var prevent = !(currTimestamp - lastTimestamp > time);
    	if(prevent)
    		MsgBox.info(msg);
    	return prevent;
    };
}
/**
 * 关闭所有激活的对话框
 */
if (!MsgDialog.prototype.closeActiveDialog) {
    MsgDialog.prototype.closeActiveDialog = function(){
    	$.getTopBody().find(".modal[aria-hidden='false'],.dialog-box").each(function(){
    		var $closeButton = $(this).find("*[data-dismiss='modal'],*[data-dismiss='dialog-box']");
    		$closeButton.filter('button[data-close]').click();
    	});
    };
}
/**
 * 启动加载中状态，屏蔽用户事件
 */
if (!MsgDialog.prototype.startLoading) {
    MsgDialog.prototype.startLoading = function(){
    	Logger.debug("common.js startLoading=> 启动加载中状态，屏蔽用户事件");
    	var $loadingDialog = $.getTopBody().find("div#msg_dialog_loading");
    	if(!$loadingDialog.length){
    		$loadingDialog = $("<div/>").attr({
    			'id':'msg_dialog_loading',
    			'class':'page-loading',
    			'data-loadingLevel':0
    		});
    		$loadingDialog.css('display','none'); // 默认不显示
    		var $loadingIcon = $("<i>").attr("class","fa fa-spinner fa-pulse fa-3x");
    		$loadingDialog.append($loadingIcon);
    		$.getTopBody().append($loadingDialog);
    	}
    	var loadingLevel = $loadingDialog.attr('data-loadingLevel');
    	$loadingDialog.attr('data-loadingLevel',parseInt(loadingLevel)+1); // 调用一次startLoading，loadingLevel+1
    	$loadingDialog.css("display",'block');
    };
}
/**
 * 关闭加载中状态
 */
if (!MsgDialog.prototype.stopLoading) {
    MsgDialog.prototype.stopLoading = function(){
    	if (!$.getTopBody) {
    		$.getTopBody = function() {
    			return $(top.document.body);
    		};
    	}
    	var $loadingDialog = $.getTopBody().find("div#msg_dialog_loading");
    	if(!$loadingDialog.length){
    		return ;
    	}
    	var loadingLevel = $loadingDialog.attr('data-loadingLevel');
    	$loadingDialog.attr('data-loadingLevel',parseInt(loadingLevel)-1); // 调用一次startLoading，loadingLevel+1
    	if(loadingLevel-1 <= 0) {
    		$loadingDialog.css('display','none');
    		$loadingDialog.attr('data-loadingLevel',0);
    	}
    };
}
/**
 * 获取当前打开对话框的window对象
 * 目前仅支持获取top下一级iframe的window
 */
if (!MsgDialog.prototype.getCurrentOpenDialogWindow) {
    MsgDialog.prototype.getCurrentOpenDialogWindow = function() {
    	var $dialog = $.getTopBody().find(".dialog-box[data-dialog-current='true']");
    	var $iframe = $dialog.find("[data-dialog-iframe='true']");
    	var pid = $iframe.attr("data-pid");
    	var $pIframe = $.getTopBody().find("iframe[data-id='" + pid + "']");
    	if ($pIframe.length > 0) {
    		var mWindow = $pIframe[0].contentWindow;
    		return mWindow;
    	}
    	return window;
    };
}
/**
 * 判断是否存在提示信息的MsgBox
 */
if (!MsgDialog.prototype.hasPromptBox) {
	MsgDialog.prototype.hasPromptBox = function() {
		var count = 0;
		$.getTopBody().find('[role="dialog"]').each(function() {
			if ($(this).css('display') != 'none') {
				count ++;
			}
		});
		return count > 0;
	};
}
// MsgDialog定义完成后，实例化一个MsgDialog对象
if (!window.MsgBox) {
	window.MsgBox = new MsgDialog();
}
